﻿Imports System.Data
Imports MetodosComuns
Imports extranet.BC
Imports extranet.BE
Imports extranet.DA
Imports System.Collections.Generic

Partial Class Cursos
  Inherits System.Web.UI.Page

  ' Inicializar parâmetros da Página
  Private Const TITULO_PAGINA As String = "Cursos"

  Private Const PNL_CURSOS_MATRICULADOS As Integer = 0
  Private Const PNL_CURSOS_DISPONIVEIS As Integer = 1
  Private Const PNL_DADOS_DO_CURSO As Integer = 2
  Private Const PNL_RESPONDER_PROVA As Integer = 3

  Dim strCodigoProva As String

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    '==================       PROCEDIMENTO  PADRÃO  SEGURANÇA     =============================
    Dim objBESeguranca As BESeguranca
    Dim objBEUsuario As BEUsuario = Session("objBEUsuario")
    If IsNothing(objBEUsuario) Then Response.Redirect(TELA_LOGOUT)
    Session("strTela") = MetodosComuns.GetCurrentPageName()
    If Not IsPostBack Then          ' SEGURANÇA
      objBESeguranca = BCSeguranca.SelecionaPermissoes(objBEUsuario.GrupoAcesso, Session("strTela"))
      If Not objBESeguranca.Autorizado Then Response.Redirect(TELA_LOGOUT)
      Session("objBESeguranca") = objBESeguranca
    Else
      objBESeguranca = Session("objBESeguranca")
    End If

    '==================       ALTERAR SE FOR NECESSARIO          ===============================
    If Not IsPostBack Then
      Dim objBECursos As List(Of BECurso) = BCCurso.SelecionarCursosDoAluno("", objBEUsuario.Usuario, "", "")
      If objBECursos.Count() > 0 Then
        btnVoltar_Click(Nothing, Nothing)
      Else
        btnMatricular_Click(Nothing, Nothing)
      End If
    End If
  End Sub

  Protected Sub ShowMensagemDeErro(ByVal strMensagem As String)
    lblErro.Visible = True
    lblErro.Text = strMensagem
  End Sub

  Protected Sub ShowMensagemDeSucesso(ByVal strMensagem As String)
    lblSucesso.Visible = True
    lblSucesso.Text = strMensagem
  End Sub

  Protected Sub ShowPainel(ByVal TipoPanel As Integer)
    lblSucesso.Visible = False
    lblErro.Visible = False
    panCursosMatriculados.Visible = False
    panCursosDisponiveis.Visible = False
    panDetalhesCurso.Visible = False
    pnl_Apresentacao.Visible = False
    pnl_Prova.Visible = False
    pnl_Questao.Visible = False
    Select Case TipoPanel
      Case PNL_CURSOS_MATRICULADOS
        grvCursosMatriculados.SelectedIndex = -1
        panCursosMatriculados.Visible = True

      Case PNL_CURSOS_DISPONIVEIS
        grvCursosDisponiveis.SelectedIndex = -1
        panCursosDisponiveis.Visible = True

      Case PNL_DADOS_DO_CURSO
        panDetalhesCurso.Visible = True

      Case PNL_RESPONDER_PROVA
        pnl_Apresentacao.Visible = True
        pnl_Prova.Visible = True
        pnl_Questao.Visible = False

    End Select

  End Sub

  Protected Sub btnMatricular_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnMatricular.Click
    Dim objBEUsuario As BEUsuario = Session("objBEUsuario")
    grvCursosDisponiveis.DataSource = BCCurso.SelecionarCursosDisponiveis(txtCurso.Text, objBEUsuario.Usuario, "", "")
    grvCursosDisponiveis.DataBind()
    If grvCursosDisponiveis.Rows().Count() > 0 Then
      ShowPainel(PNL_CURSOS_DISPONIVEIS)
    Else
      btnVoltar_Click(Nothing, Nothing)
      ShowMensagemDeErro("Não existem cursos novos ou disponíveis para Matrícula")
    End If
  End Sub

  Protected Sub grvCursosDisponiveis_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles grvCursosDisponiveis.SelectedIndexChanged
    dtvCurso.Caption = "DETALHES DO CURSO PARA MATRÍCULA"
    dtvCurso.DataSource = BCCurso.Selecionar(grvCursosDisponiveis.SelectedDataKey("Id"))
    dtvCurso.DataBind()
    btnOk.Visible = False
    ShowPainel(PNL_DADOS_DO_CURSO)
  End Sub

  Protected Sub btnVoltar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnVoltar.Click
    Dim objBEUsuario As BEUsuario = Session("objBEUsuario")
    grvCursosMatriculados.DataSource = BCCurso.SelecionarCursosDoAluno("", objBEUsuario.Usuario, "", "")
    grvCursosMatriculados.DataBind()
    ShowPainel(PNL_CURSOS_MATRICULADOS)
  End Sub

  Protected Sub grvCursosMatriculados_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles grvCursosMatriculados.SelectedIndexChanged
    Session("ProvaId") = DirectCast(grvCursosMatriculados.SelectedRow.FindControl("hd_ProvaId"), HiddenField).Value
    mostraApresentacaoProva()
  End Sub

  Protected Sub grvCursosMatriculados_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grvCursosMatriculados.RowDataBound
    If (e.Row.RowType = DataControlRowType.DataRow) Then
      Dim objBEUsuario As BEUsuario = Session("objBEUsuario")
      Dim objBECurso As BECurso = e.Row.DataItem
      Dim objBEProva As BEProva = BCProva.ResumoDaProva(objBEUsuario.Usuario, objBECurso.Prova.Id)
      If Not objBEProva Is Nothing Then
        DirectCast(e.Row.FindControl("lbl_RankingRespostas"), Label).Text = "(" & objBEProva.RespostasCertas & "/" & objBEProva.NumeroDeQuestoes & ")"
        DirectCast(e.Row.FindControl("lbl_StatusProva"), Label).Text = IIf(objBEProva.NumeroDeQuestoes = objBEProva.NumeroDeQuestoesRespondidas, "Completada", "em&nbsp;Andamento")
        'DirectCast(e.Row.FindControl("btnProva"), ImageButton).Visible = (objBEProva.NumeroDeQuestoesRespondidas > 0)
      End If
    End If
  End Sub

  Protected Sub btnOk_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOk.Click
    grvCursosMatriculados.SelectedIndex = -1
    ShowPainel(PNL_CURSOS_MATRICULADOS)
  End Sub

  Protected Sub grvCursosMatriculados_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grvCursosMatriculados.RowCommand
    Select Case e.CommandName.ToUpper()
      Case "VISUALIZARDADOS"
        dtvCurso.Caption = "DETALHES DO CURSO"
        dtvCurso.DataSource = BCCurso.Selecionar(e.CommandArgument)
        dtvCurso.DataBind()
        btnMatricularNoCurso.Visible = False
        ShowPainel(PNL_DADOS_DO_CURSO)

      Case "MATERIALCURSO"
        Response.Redirect("~/cursos/materialAulas.aspx")

    End Select
  End Sub

  Protected Sub btnCancelarMatricula_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCancelarMatricula.Click
    ShowPainel(PNL_CURSOS_DISPONIVEIS)
  End Sub

  Protected Sub btnMatricularNoCurso_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnMatricularNoCurso.Click
    Dim objBEUsuario As BEUsuario = Session("objBEUsuario")
    BCCurso.AdicionarAluno(grvCursosDisponiveis.SelectedDataKey("Id"), objBEUsuario.Usuario)
    btnMatricular_Click(Nothing, Nothing)
    If Not lblErro.Visible Then ShowMensagemDeSucesso("Matrícula realizada com Sucesso!.")
  End Sub

  Protected Sub mostraApresentacaoProva()
    Dim objBEAluno As BEAluno = MontarBEAluno()
    Dim lstProvas As New List(Of BEProva)
    lstProvas.Add(BCProva.ResumoDaProva(objBEAluno.Usuario, Session("ProvaId")))
    dtvProva.DataSource = lstProvas
    dtvProva.DataBind()
    Dim objBEQuestao As BEQuestao = BCQuestao.Selecionar1aQuestaoPendenteAluno(objBEAluno)
    ShowPainel(PNL_RESPONDER_PROVA)
    pnl_Apresentacao.Visible = (objBEQuestao IsNot Nothing)
    pnl_SemQuestoes.Visible = (objBEQuestao Is Nothing)
  End Sub

  Protected Sub btnVoltarMaisTarde_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnVoltarMaisTarde.Click
    ShowPainel(PNL_CURSOS_MATRICULADOS)
  End Sub

  Protected Sub btnIniciarProva_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnIniciarProva.Click
    Dim objBEAluno As BEAluno = MontarBEAluno()
    Dim lstProvas As New List(Of BEProva)
    lstProvas.Add(BCProva.ResumoDaProva(objBEAluno.Usuario, Session("ProvaId")))
    dtvProva.DataSource = lstProvas
    dtvProva.DataBind()
    Dim objBEQuestao As BEQuestao = BCQuestao.Selecionar1aQuestaoPendenteAluno(objBEAluno)
    pnl_Apresentacao.Visible = False
    pnl_Questao.Visible = (objBEQuestao IsNot Nothing)
    If objBEQuestao Is Nothing Then
      pnl_SemQuestoes.Visible = True
    Else
      hd_TempoInicial.Value = Now().ToString("dd/MM/yyyy HH:mm")
      hd_QuestaoId.Value = objBEQuestao.Id
      hd_EhDissertativa.Value = objBEQuestao.EhDissertativa
      lbl_Ordem.Text = objBEQuestao.Ordem & ".&nbsp;"
      lbl_Enunciado.Text = Server.HtmlDecode(objBEQuestao.Enunciado)
      grvAlternativas.DataSource = objBEQuestao.Alternativas
      grvAlternativas.DataBind()
      grvAlternativas.Visible = Not objBEQuestao.EhDissertativa
      txt_Dissertativa.Text = ""
      txt_Dissertativa.Visible = objBEQuestao.EhDissertativa

      objBEQuestao.Alternativas = Nothing
      objBEAluno.Cursos(0).Prova.Questoes = New List(Of BEQuestao)
      objBEAluno.Cursos(0).Prova.Questoes.Add(objBEQuestao)
      BCQuestao.ResponderQuestaoAluno(objBEAluno)
      pnl_Questao.Visible = True
    End If
  End Sub

  Protected Sub btnResponderContinuarMaisTarde_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnResponderContinuarMaisTarde.Click
    If ResponderQuestao() Then btnVoltar_Click(Nothing, Nothing)
  End Sub

  Protected Sub btnResponder_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnResponder.Click
    If ResponderQuestao() Then btnIniciarProva_Click(Nothing, Nothing)
  End Sub

  Protected Function MontarBEAluno() As BEAluno
    Dim objBEAluno As New BEAluno(DirectCast(Session("objBEUsuario"), BEUsuario).Usuario)
    objBEAluno.Cursos = New List(Of BECurso)
    objBEAluno.Cursos.Add(New BECurso(grvCursosMatriculados.SelectedDataKey("Id")))
    objBEAluno.Cursos(0).Prova = New BEProva
    objBEAluno.Cursos(0).Prova.Id = Session("ProvaId")
    Return objBEAluno
  End Function

  Protected Function ResponderQuestao() As Boolean
    Dim booComErro As Boolean = True
    Try
      Dim objBEAluno As BEAluno = MontarBEAluno()
      objBEAluno.Cursos(0).Prova.Questoes = New List(Of BEQuestao)
      objBEAluno.Cursos(0).Prova.Questoes.Add(New BEQuestao(hd_QuestaoId.Value))
      objBEAluno.Cursos(0).Prova.Questoes(0).EhDissertativa = hd_EhDissertativa.Value
      If hd_EhDissertativa.Value Then
        lblErro.Text = "Precisa digitar uma resposta no espaço reservado."
        booComErro = (txt_Dissertativa.Text.Trim().Length() = 0)
        objBEAluno.Cursos(0).Prova.Questoes(0).RespostaDissertativa = txt_Dissertativa.Text
      Else
        lblErro.Text = "Selecione a resposata certa entre as alternativas mostradas"
        objBEAluno.Cursos(0).Prova.Questoes(0).Alternativas = New List(Of BEAlternativa)
        For intI As Integer = 0 To grvAlternativas.Rows.Count() - 1
          If DirectCast(grvAlternativas.Rows(intI).FindControl("rb_Alternativa"), RadioButton).Checked Then
            objBEAluno.Cursos(0).Prova.Questoes(0).Alternativas.Add(New BEAlternativa(grvAlternativas.DataKeys(intI)("Id")))
            booComErro = False
            Exit For
          End If
        Next
      End If
      lblErro.Visible = booComErro
      If Not booComErro Then
        objBEAluno.Cursos(0).Prova.Questoes(0).Tempo = Now() - Convert.ToDateTime(hd_TempoInicial.Value)
        BCQuestao.ResponderQuestaoAluno(objBEAluno)
      End If
      Return Not booComErro
    Catch ex As Exception
      Return False
    End Try
  End Function

  Protected Sub btnListaDeCursos_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnListaDeCursos.Click
    btnVoltar_Click(Nothing, Nothing)
  End Sub

End Class
